# Generic命令

# COPY

# 语法

COPY source destination [DB destination-db] [REPLACE]

# 描述

该命令会将源键存储的值复制到目标键

# 参数

  • source

要复制的密钥

  • destination

要复制到的目标密钥

  • DB destination-db

将密钥复制到指定的数据库索引中

  • REPLACE

如果目标密钥已存在,则将其替换

# 示例

SET dolly "sheep"
COPY dolly clone
GET clone

# DEL

# 语法

DEL key [key ...]

# 描述

删除指定的键。如果某个键不存在,则直接忽略

# 参数

  • key

键名。

# 示例

> SET key1 "Hello"
"OK"
> SET key2 "World"
"OK"
> DEL key1 key2 key3
(integer) 2

> SET key1 "Hello"
OK
> SET key2 "World"
OK
> DEL key1 key2 key3
(integer) 2

# DUMP

# 语法

DUMP key

# 描述

将指定 key 中存储的值序列化为专属格式,并返回给用户

# 参数

  • key

键名。

# 示例

> SET mykey 10
OK
> DUMP mykey
"\x00\xc0\n\n\x00n\x9fWE\x0e\xaec\xbb"


# EXISTS

# 语法

EXISTS key [key ...]

# 描述

返回存在的键的数量,如果多次指定同一个已经存在的键,EXISTS 命令会将它重复计算。例如,如果 somekey 存在,那么执行 EXISTS somekey somekey 会返回 2

# 参数

  • key

键名。

# 示例

SET key1 "Hello"
"OK"
EXISTS key1
(integer) 1
EXISTS nosuchkey
(integer) 0
SET key2 "World"
"OK"
EXISTS key1 key2 nosuchkey
(integer) 2

> SET key1 "Hello"
OK
> EXISTS key1
(integer) 1
> EXISTS nosuchkey
(integer) 0
> SET key2 "World"
OK
> EXISTS key1 key2 nosuchkey
(integer) 2

# EXPIRE

# 语法

EXPIRE key seconds [NX | XX | GT | LT]

# 描述

为键设置超时时间。超时时间到期后,该键将被自动删除

# 参数

  • key

要获取并删除的键名。

  • seconds

存活时间。超过该秒数后,键将被自动删除

# 示例

> SET mykey "Hello"
"OK"
> EXPIRE mykey 10
(integer) 1
> TTL mykey
(integer) 10
> SET mykey "Hello World"
"OK"
> TTL mykey
(integer) -1
> EXPIRE mykey 10 XX
(integer) 0
> TTL mykey
(integer) -1
> EXPIRE mykey 10 NX
(integer) 1
> TTL mykey
(integer) 10

> SET mykey "Hello"
OK
> EXPIRE mykey 10
(integer) 1
> TTL mykey
(integer) 10
> SET mykey "Hello World"
OK
> TTL mykey
(integer) -1
> EXPIRE mykey 10 XX
(integer) 0
> TTL mykey
(integer) -1
> EXPIRE mykey 10 NX
(integer) 1
> TTL mykey
(integer) 10

# EXPIREAT

# 语法

EXPIREAT key unix-time-seconds [NX | XX | GT | LT]

# 描述

EXPIREAT 的作用和语义与 EXPIRE 完全相同,但区别在于:它不需要你指定代表 TTL(生存时间)的秒数,而是接收一个绝对的 Unix 时间戳(即自 1970 年 1 月 1 日以来的秒数)。如果传入的时间戳已经过期,该键会被立即删除

# 参数

  • key

要获取的键名。

  • unix-time-seconds

以秒为单位的 Unix 时间戳,表示绝对过期时间。如果传入的是过去的时间戳,该键会被立即删除

# 示例

> SET mykey "Hello"
OK
> EXISTS mykey
(integer) 1
> EXPIREAT mykey 1293840000
(integer) 1
> EXISTS mykey
(integer) 0

# EXPIRETIME

# 语法

EXPIRETIME key

# 描述

返回给定键过期的绝对 Unix 时间戳(以秒为单位,从 1970 年 1 月 1 日起算)

# 参数

  • key

键名。

# 示例

> SET mykey "Hello"
OK
> EXPIREAT mykey 33177117420
(integer) 1
> EXPIRETIME mykey
(integer) 33177117420

# KEYS

# 语法

KEYS pattern

# 描述

返回所有匹配该模式的键

# 参数

  • pattern

用于匹配键名的 glob 风格模式

# 示例

> MSET firstname Jack lastname Stuntman age 35
"OK"
> KEYS *name*
1) "lastname"
2) "firstname"
> KEYS a??
1) "age"
> KEYS *
1) "age"
2) "lastname"
3) "firstname"

> MSET firstname Jack lastname Stuntman age 35
OK
> KEYS *name*
1) "firstname"
2) "lastname"
> KEYS a??
1) "age"
> KEYS *
1) "age"
2) "firstname"
3) "lastname"

# MOVE

# 语法

MOVE key db

# 描述

将指定的 key 从当前选中的数据库移动到目标数据库。如果目标数据库里已经存在这个 key,或者源数据库里压根没有这个 key,命令就什么都不做。所以就可以把 MOVE 当作一个简单的锁机制来用

# 参数

  • key

键名。

  • db

目标数据库的索引


# OBJECT HELP

# 语法

OBJECT HELP

# 描述

OBJECT HELP 命令会返回一段说明文字,介绍该命令下各种子命令的用法


# PERSIST

# 语法

PERSIST key

# 描述

移除指定键(key)上现有的过期时间,使其从易失键(即设置了过期时间的键)变为持久键

# 参数

  • key

键名

# 示例

> SET mykey "Hello"
OK
> EXPIRE mykey 10
(integer) 1
> TTL mykey
(integer) 10
> PERSIST mykey
(integer) 1
> TTL mykey
(integer) -1

# PEXPIRE

# 语法

PEXPIRE key milliseconds [NX | XX | GT | LT]

# 描述

这个命令的用法和 EXPIRE 完全一样,唯一的区别是:键的存活时间(TTL)是以毫秒为单位指定的,而不是秒

# 参数

  • key

键名。

  • milliseconds

超时时间

  • NX

仅在键没有设置过期时间时,才设置过期时间

  • XX

仅在键已设置过期时间时,才更新其过期时间

  • GT

仅当新的过期时间大于当前过期时间时,才设置过期时间。在使用 GT 参数时,未设置过期时间的键会被视为具有无限的 TTL

  • LT

仅当新的过期时间小于当前过期时间时,才设置过期时间。在使用 LT 参数时,未设置过期时间的键会被视为具有无限的 TTL

# 示例

> SET mykey "Hello"
OK
> PEXPIRE mykey 1500
(integer) 1
> TTL mykey
(integer) 2
> PTTL mykey
(integer) 1500
> PEXPIRE mykey 1000 XX
(integer) 1
> TTL mykey
(integer) 1
> PEXPIRE mykey 1000 NX
(integer) 0
> TTL mykey
(integer) 1

# PEXPIREAT

# 语法

PEXPIREAT key unix-time-milliseconds [NX | XX | GT | LT]

# 描述

PEXPIREAT 的作用和语义与 EXPIREAT 完全相同,唯一的区别是:它指定键的过期时间(Unix 时间戳)是以毫秒为单位,而不是秒

# 参数

  • key

键名

  • unix-time-seconds

以秒为单位的 Unix 时间戳,表示绝对过期时间。如果传入的是过去的时间戳,该键会被立即删除

  • NX

仅在键没有设置过期时间时,才设置过期时间

  • XX

仅在键已设置过期时间时,才更新其过期时间

  • GT

仅当新的过期时间大于当前过期时间时,才设置过期时间。在使用 GT 参数时,未设置过期时间的键会被视为具有无限的 TTL

  • LT

仅当新的过期时间小于当前过期时间时,才设置过期时间。在使用 LT 参数时,未设置过期时间的键会被视为具有无限的 TTL

# 示例

> SET mykey "Hello"
OK
> PEXPIREAT mykey 1555555555005
(integer) 1
> TTL mykey
(integer) -2
 PTTL mykey
(integer) -2

# PEXPIRETIME

# 语法

PEXPIRETIME key

# 描述

PEXPIRETIME 的语义和 EXPIRETIME 是一样的,不过它返回的是毫秒级的绝对 Unix 过期时间戳,而不是秒级

# 参数

  • key

要获取值的一个或多个键名。可以指定多个 key,以空格分隔。

# 示例

> SET mykey "Hello"
OK
> PEXPIREAT mykey 33177117420000
(integer) 1
> PEXPIRETIME mykey
(integer) 33177117420000

# PTTL

# 语法

PTTL key

# 描述

和 TTL 命令一样,这个命令也会返回已设置过期时间的键的剩余生存时间。它们唯一的区别在于:TTL 返回的剩余时间单位是秒,而 PTTL 返回的单位是毫秒

# 参数

  • key

键名。

# 示例

> SET mykey "Hello"
OK
redis> EXPIRE mykey 1
(integer) 1
redis> PTTL mykey
(integer) 1000

# RANDOMKEY

# 语法

RANDOMKEY

# 描述

从当前选中的数据库中返回一个随机的键


# RENAME

# 语法

RENAME key newkey

# 描述

将 key 重命名为 newkey

# 参数

  • key

键名

  • newkey

新键名

# 示例

> SET mykey "Hello"
OK
> RENAME mykey myotherkey
OK
> GET myotherkey
"Hello"

# RENAMENX

# 语法

RENAMENX key newkey

# 描述

如果 newkey 尚不存在,则将 key 重命名为 newkey。当 key 不存在时,会返回错误

# 参数

  • key

键名

  • newkey

新键名

# 示例

> SET mykey "Hello"
OK
> SET myotherkey "World"
OK
> RENAMENX mykey myotherkey
(integer) 0
> GET myotherkey
"World"

# SCAN cursor

# 语法

SCAN cursor [MATCH pattern] [COUNT count] [TYPE type]

# 描述

SCAN 命令及其密切相关的 SSCAN、HSCAN 和 ZSCAN 命令,用于对集合中的元素进行增量迭代。其中,SCAN 用于迭代当前所选数据库中的键集合;SSCAN 用于迭代 Set类型的元素;HSCAN 用于迭代 Hash类型的字段及其关联的值;ZSCAN 则用于迭代 Sorted Set类型的元素及其关联的分数

# 参数

  • cursor

游标值。传入 0 开始一次迭代,然后将每次调用返回的游标作为下一次调用的参数

  • MATCH pattern

仅返回与给定的 glob 风格模式相匹配的键

  • COUNT

每次迭代返回键数量的提示值。默认值为 10

  • TYPE

仅返回指定类型的键,例如 string、list 或 set

# 示例

> scan 0
1) "17"
2)  1) "key:12"
    2) "key:8"
    3) "key:4"
    4) "key:14"
    5) "key:16"
    6) "key:17"
    7) "key:15"
    8) "key:10"
    9) "key:3"
   10) "key:7"
   11) "key:1"
> scan 17
1) "0"
2) 1) "key:5"
   2) "key:18"
   3) "key:0"
   4) "key:2"
   5) "key:19"
   6) "key:13"
   7) "key:6"
   8) "key:9"
   9) "key:11"

> sadd myset 1 2 3 foo foobar feelsgood
(integer) 6
> sscan myset 0 match f*
1) "0"
2) 1) "foo"
   2) "feelsgood"
   3) "foobar"

> scan 0 MATCH *11*
1) "288"
2) 1) "key:911"
> scan 288 MATCH *11*
1) "224"
2) (empty list or set)
> scan 224 MATCH *11*
1) "80"
2) (empty list or set)
> scan 80 MATCH *11*
1) "176"
2) (empty list or set)
> scan 176 MATCH *11* COUNT 1000
1) "0"
2)  1) "key:611"
    2) "key:711"
    3) "key:118"
    4) "key:117"
    5) "key:311"
    6) "key:112"
    7) "key:111"
    8) "key:110"
    9) "key:113"
   10) "key:211"
   11) "key:411"
   12) "key:115"
   13) "key:116"
   14) "key:114"
   15) "key:119"
   16) "key:811"
   17) "key:511"
   18) "key:11"

# TOUCH

# 语法

TOUCH key [key ...]

# 描述

更新一个或多个键的最后访问时间。如果某个键不存在,则会被直接忽略

# 参数

  • key

    键名。

# 示例

> SET key1 "Hello"
OK
> SET key2 "World"
OK
> TOUCH key1 key2
(integer) 2

# TTL

# 语法

TTL key

# 描述

返回设置了超时时间的键的剩余生存时间(TTL)。这种自省能力允许客户端检查一个给定的键还能在数据集中保留多少秒

# 参数

  • key

    键名。

# 示例

> SET mykey "Hello"
"OK"
> EXPIRE mykey 10
(integer) 1
> TTL mykey
(integer) 10

> SET mykey "Hello"
OK
> EXPIRE mykey 10
(integer) 1
> TTL mykey
(integer) 10

# TYPE

# 语法

TYPE key

# 描述

返回存储在指定键中的值类型的字符串表示

# 参数

  • key

    键名。

# 示例

s> SET key1 "value"
OK
> LPUSH key2 "value"
(integer) 1
> SADD key3 "value"
(integer) 1
> TYPE key1
string
> TYPE key2
list
> TYPE key3
set

# OBJECT

# 语法

OBJECT

# 描述

这是一个用于对象自省命令的容器命令